/* 充当 socket 通信的服务端 */
const express = require('express')
const app = express()
const http = require('http')
const server = http.createServer(app)

// 引入 socket.io 服务端的库
const { Server } = require("socket.io")
// 基于 http 服务器创建服务端套接字对象
const io = new Server(server)
/* 
 * 注册 connection 事件监听：等待客户端连接。
 * 当有客户端连接到服务器时，会执行回调函数。
 * 回调函数的 socket 参数表示的是连接的客户端对象。
 */
io.on('connection', socket => {
  console.log('a user connected')
  socket.emit('clientReceive', '欢迎进入聊天室')

  // 注册自定义的事件，用于接收客户端发送的消息
  socket.on('serverReceive', msg => {
    console.log('message: ' + msg)
    // 将接收到的当前客户的消息转发给每个连接到服务器的客户端
    io.emit('clientReceive', msg)
  })

  // 当客户断开连接触发执行
  socket.on('disconnect', () => {
    console.log('user disconnected')
  })
})

app.get('/', (req, res) => {
  res.sendFile(__dirname + '/index.html')
})

server.listen(9527, () => {
  console.log('listening on *:9527')
})
